package com.example.petshopping.utils;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

import java.lang.reflect.Type;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

/**
 * LocalDateTime自定义反序列化器
 * 处理时间戳到LocalDateTime的转换
 */
public class LocalDateTimeDeserializer implements JsonDeserializer<LocalDateTime> {
    
    @Override
    public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
            throws JsonParseException {
        try {
            if (json.isJsonNull()) {
                return null;
            }
            
            // 如果是数字类型（时间戳）
            if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isNumber()) {
                long timestamp = json.getAsLong();
                
                // 如果时间戳为0，返回null
                if (timestamp == 0) {
                    return null;
                }
                
                // 判断时间戳是否为毫秒级别（13位）或秒级别（10位）
                if (timestamp > 9999999999L) {
                    // 毫秒级时间戳
                    return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
                } else {
                    // 秒级时间戳
                    return LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault());
                }
            }
            
            // 如果是字符串类型，尝试解析ISO格式
            if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) {
                String dateString = json.getAsString();
                if (dateString.isEmpty()) {
                    return null;
                }
                return LocalDateTime.parse(dateString);
            }
            
            return null;
        } catch (Exception e) {
            throw new JsonParseException("无法解析LocalDateTime: " + json.toString(), e);
        }
    }
} 